package proyectoX.src.municiones;

import java.awt.Rectangle;

import javax.swing.ImageIcon;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.Escudo;

/**
 * Escudo que vuelve invulnerable a la nave que la dispara.
 * Mantiene un delay para desactivarse luego de 3 segundos.
 *
 */
public class MunicionEscudo extends MunicionX {

	protected Escudo arma;
	protected long tiempoActivacionEscudo;
	protected static final int DURACION_ESCUDO = 3000; //el tiempo de duración

	/**
	 * Crea a la munición con los datos pasados por parámetro.
	 * @param posX Posición x.
	 * @param posY Posición y.
	 * @param e Escudo que la dispara.
	 * @param nivel Nivel actual.
	 */
	public MunicionEscudo(int posX, int posY, Escudo e,Nivel nivel) {
		super(e,nivel,0);
		this.arma = e;
		ImageIcon imagen = new ImageIcon(this.getClass().getResource("/proyectoX/sprites/escudo.gif"));
		this.setIcon(imagen);
		this.setVisible(true);
		this.setSize(imagen.getIconWidth(), imagen.getIconHeight());		
		this.setLocation(posX, posY);
		this.tiempoActivacionEscudo = System.currentTimeMillis();
	}

	/**
	 * Crea a la munición con los datos pasados por parámetro.
	 * @param escudo Escudo que la crea.
	 * @param nivel Nivel actual.
	 */
	public MunicionEscudo(Escudo escudo, Nivel nivel) {
		this(0, 0, escudo, nivel);
	}


	/**
	 * Le pide al arma la nueva posición donde se debe ubicar.
	 * La posición nueva es siempre centrada en la nave. 
	 */
	public void actualizarPosicion() {
		int[] arr = arma.obtenerNuevaPosicion();
		this.setLocation(arr[0], arr[1]);
		if (System.currentTimeMillis() - tiempoActivacionEscudo  >= DURACION_ESCUDO) {
			arma.desactivar();
		}
	}

	/**
	 * Devuelve el área de colisión de la munición. En este caso es nula porque no colisiona.
	 * @return Área de colisión.
	 */
	public Rectangle getBounds() {
		return new Rectangle(); //de tamaño 0 en el punto (0,0) porque no colisiona.
	}


	/**
	 * Devuelve siempre falso porque no participa en colisiones.
	 * @return Falso.
	 */
	public boolean calcularColisiones() {		
		return false;
	}





}
